#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#define FILE_NAME(number) "log.txt"#number

//每一个宏，对应的数值码，只有一个比特位是1，彼此位置不会重叠
//#define ONE (1<<0)
//#define TWO (1<<1)
//#define THREE (1<<2)
//#define FOUR (1<<3)
//
//void show(int flags)
//{
//    if(flags & ONE) printf("one\n");
//    if(flags & TWO) printf("two\n");
//    if(flags & THREE) printf("three\n");
//    if(flags & FOUR) printf("four\n");
//}

int main()
{
    //文件操作的本质：进程和被打开文件的关系
    
    umask(0);
    //int fd = open(FILE_NAME, O_WRONLY | O_CREAT | O_TRUNC, 0666);   //写 | 没有就创建 | 清空文件内容
    int fd1 = open(FILE_NAME(1), O_WRONLY | O_CREAT | O_APPEND, 0666);    // 写 | 没有就创建 | 追加
    int fd2 = open(FILE_NAME(2), O_WRONLY | O_CREAT | O_APPEND, 0666);    // 写 | 没有就创建 | 追加
    int fd3 = open(FILE_NAME(3), O_WRONLY | O_CREAT | O_APPEND, 0666);    // 写 | 没有就创建 | 追加
    int fd4 = open(FILE_NAME(4), O_WRONLY | O_CREAT | O_APPEND, 0666);    // 写 | 没有就创建 | 追加
    int fd5 = open(FILE_NAME(5), O_WRONLY | O_CREAT | O_APPEND, 0666);    // 写 | 没有就创建 | 追加
    //int fd = open(FILE_NAME, O_RDONLY); 
    //assert(fd != -1);
//    if(fd < 0)
//    {
//        perror("open");
//        return 1;
//    }
//    
//    char buffer[1024];
//    ssize_t num = read(fd, buffer, sizeof(buffer) - 1);
//    if(num > 0) buffer[num] = 0;
//    printf("%s", buffer);

//    int cnt = 5;
//    char outBuffer[64];
//    while(cnt)
//    {
//        sprintf(outBuffer, "%s:%d\n", "hello world", cnt--);
//
//        write(fd, outBuffer, strlen(outBuffer));        //向文件中写入string不需要+1 系统写入不需要\0
//    }

    printf("fd: %d\n", fd1);
    printf("fd: %d\n", fd2);
    printf("fd: %d\n", fd3);
    printf("fd: %d\n", fd4);
    printf("fd: %d\n", fd5);

    close(fd1);
    close(fd2);
    close(fd3);
    close(fd4);
    close(fd5);

//    show(ONE);
//    printf("----------------------------\n");
//    show(TWO);
//    printf("----------------------------\n");
//    show(ONE | TWO);
//    printf("----------------------------\n");
//    show(ONE | TWO | THREE);
//    printf("----------------------------\n");
//    show(ONE | TWO | THREE | FOUR);
//    printf("----------------------------\n");

//以下都是C语言提供的接口
    //FILE* fp= fopen(FILE_NAME, "w");   //r读，w写，r+（读写，不存在出错），w+（读写，不存在创建），a（追加），a+（）
    //FILE* fp= fopen(FILE_NAME, "r");   //r读，w写，r+（读写，不存在出错），w+（读写，不存在创建），a（追加），a+（）
//    FILE* fp= fopen(FILE_NAME, "a");   //r读，w写，r+（读写，不存在出错），w+（读写，不存在创建），a（追加），a+（）
//    if(NULL == fp)
//    {
//        perror("fopen");
//        return 1;
//    }

//    char buffer[64];
//    while(fgets(buffer, sizeof(buffer) - 1, fp) != NULL)
//    {
//        buffer[strlen(buffer) - 1] = 0;
//        puts(buffer);
//    }
//    int cnt = 5;
//    while(cnt)
//    {
//        fprintf(fp, "%s:%d\n", "hello world", cnt--);
//    }
//
//    fclose(fp);
}
